fixes for assignment errors with GTK_CTREE_NODE_NEXT/PREV
authorLars Hamann <lars@gtk.org>
Fri, 2 Oct 1998 23:45:09 +0000 (23:45 +0000)
committerLars Hamann <lars@src.gnome.org>
Fri, 2 Oct 1998 23:45:09 +0000 (23:45 +0000)
Sat Oct  3 01:25:24 1998  Lars Hamann  <lars@gtk.org>

    * gtk/gtkctree.c (gtk_ctree_insert_gnode) (real_tree_collapse)
    (gtk_ctree_link) (gtk_ctree_unlink) (real_tree_expand):
    fixes for assignment errors with GTK_CTREE_NODE_NEXT/PREV

    (real_tree_expand) (real_tree_collapse):
    don't expand/collapse a leaf

ChangeLog
ChangeLog.pre-2-0
ChangeLog.pre-2-10
ChangeLog.pre-2-2
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
gtk/gtkctree.c

index b4c28477fe2049a614661b98ac85e3fb769a7646..60b25e769a83633b40e95786b09406ec9caf3c37 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+Sat Oct  3 01:25:24 1998  Lars Hamann  <lars@gtk.org>
+
+       * gtk/gtkctree.c (gtk_ctree_insert_gnode) (real_tree_collapse)
+       (gtk_ctree_link) (gtk_ctree_unlink) (real_tree_expand): 
+       fixes for assignment errors with GTK_CTREE_NODE_NEXT/PREV
+
+       (real_tree_expand) (real_tree_collapse):
+       don't expand/collapse a leaf
+
 Fri Oct  2 16:10:36 1998  Tim Janik  <timj@gtk.org>
 
        * gtk/gtktypeutils.c (gtk_type_enum_find_value): make sure we don't
index b4c28477fe2049a614661b98ac85e3fb769a7646..60b25e769a83633b40e95786b09406ec9caf3c37 100644 (file)
@@ -1,3 +1,12 @@
+Sat Oct  3 01:25:24 1998  Lars Hamann  <lars@gtk.org>
+
+       * gtk/gtkctree.c (gtk_ctree_insert_gnode) (real_tree_collapse)
+       (gtk_ctree_link) (gtk_ctree_unlink) (real_tree_expand): 
+       fixes for assignment errors with GTK_CTREE_NODE_NEXT/PREV
+
+       (real_tree_expand) (real_tree_collapse):
+       don't expand/collapse a leaf
+
 Fri Oct  2 16:10:36 1998  Tim Janik  <timj@gtk.org>
 
        * gtk/gtktypeutils.c (gtk_type_enum_find_value): make sure we don't
index b4c28477fe2049a614661b98ac85e3fb769a7646..60b25e769a83633b40e95786b09406ec9caf3c37 100644 (file)
@@ -1,3 +1,12 @@
+Sat Oct  3 01:25:24 1998  Lars Hamann  <lars@gtk.org>
+
+       * gtk/gtkctree.c (gtk_ctree_insert_gnode) (real_tree_collapse)
+       (gtk_ctree_link) (gtk_ctree_unlink) (real_tree_expand): 
+       fixes for assignment errors with GTK_CTREE_NODE_NEXT/PREV
+
+       (real_tree_expand) (real_tree_collapse):
+       don't expand/collapse a leaf
+
 Fri Oct  2 16:10:36 1998  Tim Janik  <timj@gtk.org>
 
        * gtk/gtktypeutils.c (gtk_type_enum_find_value): make sure we don't
index b4c28477fe2049a614661b98ac85e3fb769a7646..60b25e769a83633b40e95786b09406ec9caf3c37 100644 (file)
@@ -1,3 +1,12 @@
+Sat Oct  3 01:25:24 1998  Lars Hamann  <lars@gtk.org>
+
+       * gtk/gtkctree.c (gtk_ctree_insert_gnode) (real_tree_collapse)
+       (gtk_ctree_link) (gtk_ctree_unlink) (real_tree_expand): 
+       fixes for assignment errors with GTK_CTREE_NODE_NEXT/PREV
+
+       (real_tree_expand) (real_tree_collapse):
+       don't expand/collapse a leaf
+
 Fri Oct  2 16:10:36 1998  Tim Janik  <timj@gtk.org>
 
        * gtk/gtktypeutils.c (gtk_type_enum_find_value): make sure we don't
index b4c28477fe2049a614661b98ac85e3fb769a7646..60b25e769a83633b40e95786b09406ec9caf3c37 100644 (file)
@@ -1,3 +1,12 @@
+Sat Oct  3 01:25:24 1998  Lars Hamann  <lars@gtk.org>
+
+       * gtk/gtkctree.c (gtk_ctree_insert_gnode) (real_tree_collapse)
+       (gtk_ctree_link) (gtk_ctree_unlink) (real_tree_expand): 
+       fixes for assignment errors with GTK_CTREE_NODE_NEXT/PREV
+
+       (real_tree_expand) (real_tree_collapse):
+       don't expand/collapse a leaf
+
 Fri Oct  2 16:10:36 1998  Tim Janik  <timj@gtk.org>
 
        * gtk/gtktypeutils.c (gtk_type_enum_find_value): make sure we don't
index b4c28477fe2049a614661b98ac85e3fb769a7646..60b25e769a83633b40e95786b09406ec9caf3c37 100644 (file)
@@ -1,3 +1,12 @@
+Sat Oct  3 01:25:24 1998  Lars Hamann  <lars@gtk.org>
+
+       * gtk/gtkctree.c (gtk_ctree_insert_gnode) (real_tree_collapse)
+       (gtk_ctree_link) (gtk_ctree_unlink) (real_tree_expand): 
+       fixes for assignment errors with GTK_CTREE_NODE_NEXT/PREV
+
+       (real_tree_expand) (real_tree_collapse):
+       don't expand/collapse a leaf
+
 Fri Oct  2 16:10:36 1998  Tim Janik  <timj@gtk.org>
 
        * gtk/gtktypeutils.c (gtk_type_enum_find_value): make sure we don't
index b4c28477fe2049a614661b98ac85e3fb769a7646..60b25e769a83633b40e95786b09406ec9caf3c37 100644 (file)
@@ -1,3 +1,12 @@
+Sat Oct  3 01:25:24 1998  Lars Hamann  <lars@gtk.org>
+
+       * gtk/gtkctree.c (gtk_ctree_insert_gnode) (real_tree_collapse)
+       (gtk_ctree_link) (gtk_ctree_unlink) (real_tree_expand): 
+       fixes for assignment errors with GTK_CTREE_NODE_NEXT/PREV
+
+       (real_tree_expand) (real_tree_collapse):
+       don't expand/collapse a leaf
+
 Fri Oct  2 16:10:36 1998  Tim Janik  <timj@gtk.org>
 
        * gtk/gtktypeutils.c (gtk_type_enum_find_value): make sure we don't
index a60a9244969235fb3d983517446c1d2564252642..5e666b389cecaa7892e9f33323967ec4001332d4 100644 (file)
@@ -2466,7 +2466,9 @@ gtk_ctree_link (GtkCTree     *ctree,
                gboolean      update_focus_row)
 {
   GtkCList *clist;
-  GtkCTreeNode *list_end;
+  GList *list_end;
+  GList *list;
+  GList *work;
   gboolean visible = FALSE;
   gint rows = 0;
   
@@ -2489,8 +2491,8 @@ gtk_ctree_link (GtkCTree     *ctree,
       clist->undo_unselection = NULL;
     }
 
-  for (rows = 1, list_end = node; GTK_CTREE_NODE_NEXT (list_end);
-       list_end = GTK_CTREE_NODE_NEXT (list_end))
+  for (rows = 1, list_end = (GList *)node; list_end->next;
+       list_end = list_end->next)
     rows++;
 
   GTK_CTREE_ROW (node)->parent = parent;
@@ -2502,20 +2504,18 @@ gtk_ctree_link (GtkCTree     *ctree,
       visible = TRUE;
       clist->rows += rows;
     }
-      
+
+  if (parent)
+    work = (GList *)(GTK_CTREE_ROW (parent)->children);
+  else
+    work = clist->row_list;
 
   if (sibling)
     {
-      GtkCTreeNode *work;
-
-      if (parent)
-       work = GTK_CTREE_ROW (parent)->children;
-      else
-       work = GTK_CTREE_NODE (clist->row_list);
-      if (work != sibling)
+      if (work != (GList *)sibling)
        {
          while (GTK_CTREE_ROW (work)->sibling != sibling)
-           work = GTK_CTREE_ROW (work)->sibling;
+           work = (GList *)(GTK_CTREE_ROW (work)->sibling);
          GTK_CTREE_ROW (work)->sibling = node;
        }
 
@@ -2523,61 +2523,66 @@ gtk_ctree_link (GtkCTree     *ctree,
        clist->row_list = (GList *) node;
       if (GTK_CTREE_NODE_PREV (sibling) &&
          GTK_CTREE_NODE_NEXT (GTK_CTREE_NODE_PREV (sibling)) == sibling)
-       GTK_CTREE_NODE_NEXT (GTK_CTREE_NODE_PREV (sibling)) = node;
+       {
+         list = (GList *)GTK_CTREE_NODE_PREV (sibling);
+         list->next = (GList *)node;
+       }
       
-      GTK_CTREE_NODE_PREV (node) = GTK_CTREE_NODE_PREV (sibling);
-      GTK_CTREE_NODE_NEXT (list_end) = sibling;
-      GTK_CTREE_NODE_PREV (sibling) = list_end;
+      list = (GList *)node;
+      list->prev = (GList *)GTK_CTREE_NODE_PREV (sibling);
+      list_end->next = (GList *)sibling;
+      list = (GList *)sibling;
+      list->prev = list_end;
       if (parent && GTK_CTREE_ROW (parent)->children == sibling)
        GTK_CTREE_ROW (parent)->children = node;
     }
   else
     {
-      GtkCTreeNode *work;
-
-      if (parent)
-       work = GTK_CTREE_ROW (parent)->children;
-      else
-       work = GTK_CTREE_NODE (clist->row_list);
-
       if (work)
        {
          /* find sibling */
          while (GTK_CTREE_ROW (work)->sibling)
-           work = GTK_CTREE_ROW (work)->sibling;
+           work = (GList *)(GTK_CTREE_ROW (work)->sibling);
          GTK_CTREE_ROW (work)->sibling = node;
          
          /* find last visible child of sibling */
-         work = gtk_ctree_last_visible (ctree, work);
+         work = (GList *) gtk_ctree_last_visible (ctree,
+                                                  GTK_CTREE_NODE (work));
          
-         GTK_CTREE_NODE_NEXT (list_end) = GTK_CTREE_NODE_NEXT (work);
-         if (GTK_CTREE_NODE_NEXT (work))
-           GTK_CTREE_NODE_PREV (GTK_CTREE_NODE_NEXT (work)) = list_end;
-         GTK_CTREE_NODE_NEXT (work) = node;
-         GTK_CTREE_NODE_PREV (node) = work;
+         list_end->next = work->next;
+         if (work->next)
+           list = work->next->prev = list_end;
+         work->next = (GList *)node;
+         list = (GList *)node;
+         list->prev = work;
        }
       else
        {
          if (parent)
            {
              GTK_CTREE_ROW (parent)->children = node;
-             GTK_CTREE_NODE_PREV (node) = parent;
+             list = (GList *)node;
+             list->prev = (GList *)parent;
              if (GTK_CTREE_ROW (parent)->expanded)
                {
-                 GTK_CTREE_NODE_NEXT (list_end)= GTK_CTREE_NODE_NEXT (parent);
+                 list_end->next = (GList *)GTK_CTREE_NODE_NEXT (parent);
                  if (GTK_CTREE_NODE_NEXT(parent))
-                   GTK_CTREE_NODE_PREV (GTK_CTREE_NODE_NEXT (parent)) =
-                     list_end;
-                 GTK_CTREE_NODE_NEXT (parent) = node;
+                   {
+                     list = (GList *)GTK_CTREE_NODE_NEXT (parent);
+                     list->prev = list_end;
+                   }
+                 list = (GList *)parent;
+                 list->next = (GList *)node;
                }
              else
-               GTK_CTREE_NODE_NEXT (list_end) = NULL;
+               list_end->next = NULL;
            }
          else
            {
              clist->row_list = (GList *)node;
-             GTK_CTREE_NODE_PREV (node) = NULL;
-             GTK_CTREE_NODE_NEXT (list_end) = NULL;
+             list = (GList *)node;
+             list->prev = NULL;
+             list_end->next = NULL;
            }
        }
     }
@@ -2586,7 +2591,7 @@ gtk_ctree_link (GtkCTree     *ctree,
 
   if (clist->row_list_end == NULL ||
       clist->row_list_end->next == (GList *)node)
-    GTK_CTREE_NODE (clist->row_list_end) = list_end;
+    clist->row_list_end = list_end;
 
   if (visible && update_focus_row)
     {
@@ -2613,6 +2618,7 @@ gtk_ctree_unlink (GtkCTree     *ctree,
   gint visible;
   GtkCTreeNode *work;
   GtkCTreeNode *parent;
+  GList *list;
 
   g_return_if_fail (ctree != NULL);
   g_return_if_fail (GTK_IS_CTREE (ctree));
@@ -2670,13 +2676,18 @@ gtk_ctree_unlink (GtkCTree     *ctree,
 
   if (work)
     {
-      GTK_CTREE_NODE_NEXT (GTK_CTREE_NODE_PREV (work)) = NULL;
-      GTK_CTREE_NODE_PREV (work) = GTK_CTREE_NODE_PREV (node);
+      list = (GList *)GTK_CTREE_NODE_PREV (work);
+      list->next = NULL;
+      list = (GList *)work;
+      list->prev = (GList *)GTK_CTREE_NODE_PREV (node);
     }
 
   if (GTK_CTREE_NODE_PREV (node) &&
       GTK_CTREE_NODE_NEXT (GTK_CTREE_NODE_PREV (node)) == node)
-    GTK_CTREE_NODE_NEXT (GTK_CTREE_NODE_PREV (node)) = work;
+    {
+      list = (GList *)GTK_CTREE_NODE_PREV (node);
+      list->next = (GList *)work;
+    }
 
   /* update tree */
   parent = GTK_CTREE_ROW (node)->parent;
@@ -2849,7 +2860,7 @@ real_tree_expand (GtkCTree     *ctree,
   g_return_if_fail (ctree != NULL);
   g_return_if_fail (GTK_IS_CTREE (ctree));
 
-  if (!node || GTK_CTREE_ROW (node)->expanded)
+  if (!node || GTK_CTREE_ROW (node)->expanded || GTK_CTREE_ROW (node)->is_leaf)
     return;
 
   clist = GTK_CLIST (ctree);
@@ -2898,21 +2909,27 @@ real_tree_expand (GtkCTree     *ctree,
     {
       gint tmp = 0;
       gint row;
-
+      GList *list;
+      
       while (GTK_CTREE_NODE_NEXT (work))
        {
          work = GTK_CTREE_NODE_NEXT (work);
          tmp++;
        }
 
-      GTK_CTREE_NODE_NEXT (work) = GTK_CTREE_NODE_NEXT (node);
+      list = (GList *)work;
+      list->next = (GList *)GTK_CTREE_NODE_NEXT (node);
 
       if (GTK_CTREE_NODE_NEXT (node))
-       GTK_CTREE_NODE_PREV (GTK_CTREE_NODE_NEXT (node)) = work;
+       {
+         list = (GList *)GTK_CTREE_NODE_NEXT (node);
+         list->prev = (GList *)work;
+       }
       else
        clist->row_list_end = (GList *)work;
 
-      GTK_CTREE_NODE_NEXT (node) = GTK_CTREE_ROW (node)->children;
+      list = (GList *)node;
+      list->next = (GList *)(GTK_CTREE_ROW (node)->children);
       
       if (gtk_ctree_is_viewable (ctree, node))
        {
@@ -2937,7 +2954,7 @@ real_tree_collapse (GtkCTree     *ctree,
   g_return_if_fail (ctree != NULL);
   g_return_if_fail (GTK_IS_CTREE (ctree));
 
-  if (!node || !GTK_CTREE_ROW (node)->expanded)
+  if (!node || !GTK_CTREE_ROW (node)->expanded ||GTK_CTREE_ROW (node)->is_leaf)
     return;
 
   clist = GTK_CLIST (ctree);
@@ -2986,6 +3003,7 @@ real_tree_collapse (GtkCTree     *ctree,
     {
       gint tmp = 0;
       gint row;
+      GList *list;
 
       while (work && GTK_CTREE_ROW (work)->level > level)
        {
@@ -2995,13 +3013,17 @@ real_tree_collapse (GtkCTree     *ctree,
 
       if (work)
        {
-         GTK_CTREE_NODE_NEXT (node) = work;
-         GTK_CTREE_NODE_NEXT (GTK_CTREE_NODE_PREV (work)) = NULL;
-         GTK_CTREE_NODE_PREV (work) = node;
+         list = (GList *)node;
+         list->next = (GList *)work;
+         list = (GList *)GTK_CTREE_NODE_PREV (work);
+         list->next = NULL;
+         list = (GList *)work;
+         list->prev = (GList *)node;
        }
       else
        {
-         GTK_CTREE_NODE_NEXT (node) = NULL;
+         list = (GList *)node;
+         list->next = NULL;
          clist->row_list_end = (GList *)node;
        }
 
@@ -3809,7 +3831,8 @@ gtk_ctree_insert_node (GtkCTree     *ctree,
        GTK_CLIST_CLASS_FW (clist)->set_cell_contents
          (clist, &(new_row->row), i, GTK_CELL_TEXT, text[i], 0, NULL, NULL);
 
-  set_node_info (ctree, node, text ? text[ctree->tree_column] : NULL, spacing, pixmap_closed,
+  set_node_info (ctree, node, text ?
+                text[ctree->tree_column] : NULL, spacing, pixmap_closed,
                 mask_closed, pixmap_opened, mask_opened, is_leaf, expanded);
 
   /* sorted insertion */
@@ -3845,7 +3868,7 @@ gtk_ctree_insert_gnode (GtkCTree          *ctree,
   GtkCTreeNode *cnode = NULL;
   GtkCTreeNode *child = NULL;
   GtkCTreeNode *new_child;
-  GtkCTreeRow *new_row;
+  GList *list;
   gboolean thaw;
   GNode *work;
   guint depth = 1;
@@ -3862,9 +3885,9 @@ gtk_ctree_insert_gnode (GtkCTree          *ctree,
   if (parent)
     depth = GTK_CTREE_ROW (parent)->level + 1;
 
-  new_row = row_new (ctree);
-  cnode = GTK_CTREE_NODE (g_list_alloc ());
-  GTK_CTREE_ROW (cnode) = new_row;
+  list = g_list_alloc ();
+  list->data = row_new (ctree);
+  cnode = GTK_CTREE_NODE (list);
 
   thaw = !GTK_CLIST_FROZEN (clist);
   if (thaw)